/*
 * AccountDB
 * Executa alterações no banco de dados referente ás operações na aonta de usuário
 */

package account;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class AccountDB {

	/*
	 * createAccount
	 * Cria a conta de usuario com loginName = usuario, password = senha
	 * Se sucesso retorna true, caso contrario false
	 */
	 public static Boolean createAccount(String usuario, String password, String tipo,
			 String nome, String rg, String cpf, String endereco, String telefone, String email,
			 int dia, int mes, int ano, char sexo)
	 {
			Connection conn = null;
			
			try
			{  
		          Class.forName("org.postgresql.Driver").newInstance();  
		    }
			catch (Exception e)
			{  
		    }  
			
			try
			{
				conn = DriverManager.getConnection("jdbc:postgresql://localhost/mc436","root","root"); 
			}
			catch (SQLException e)
			{
				System.err.println("Não foi possível obter conexão com banco!");
				e.printStackTrace();
			}   
			
			try
			{
				if(conn == null)
				{
					throw new Exception();
				}
				else
				{
					 Statement st0 = conn.createStatement();
			         ResultSet rs = st0.executeQuery("SELECT * FROM usuario");
			         while (rs.next()) {
			             if(rs.getString("login").equals(usuario))
			             {
			            	return false;
			             }
			         }
			         PreparedStatement st = conn.prepareStatement("INSERT INTO usuario VALUES('"+usuario+"','"+password+"','"+tipo+"','"
			        		 +nome+"','"+rg+"','"+cpf+"','"+endereco+"','"+telefone+"','"+email+"','"
			        		 +dia+"','"+mes+"','"+ano+"','"+sexo+"')" );
			         st.executeUpdate();
			         	
			         st.close();
				}
			}
			catch(Exception e){
				e.printStackTrace();
			}
			return true;
	}
	 /*
	  * Deleta a conta de usuario com loginName = usuario e senha = oldPass
	  * Se oldPass não confere com o do banco de dados, não deleta 
	  * e retorna que não foi possível executar a operaçãos
	  */
	 public static boolean delete(String usuario, String oldPass)
		{
			Connection conn = null;
			//Cria conexão com o BD
			try
			{  
		          Class.forName("org.postgresql.Driver").newInstance();  
		    }
			catch (Exception e)
			{  
		    }
			
			try
			{
				conn = DriverManager.getConnection("jdbc:postgresql://localhost/mc436","root","root"); 
			}
			catch (SQLException e)
			{
				System.err.println("Não foi possível obter conexão com banco!");
				e.printStackTrace();
			}  
			
			//Executa o Delte
			try
			{
				if(conn == null)
					throw new Exception();
				else
				{			
					 Statement st0 = conn.createStatement();
			         ResultSet rs = st0.executeQuery("SELECT * FROM usuario");
			         while (rs.next()) {
			             if(rs.getString("login").equals(usuario) && rs.getString("password").equals(oldPass))
			             {

			            	 PreparedStatement st = conn.prepareStatement("DELETE FROM usuario WHERE login='"+usuario+"'");
			    	         st.executeUpdate();
			    	         st.close();
			    	         return true;
			             }
			         }
			         st0.close();
				}
						 	
			}
			catch(Exception e){
				e.printStackTrace();
			}
			return false;
			
		}
	 
	 /*
	  * Altera senha do usuario
	  * Se a senha OldPass nao confere com o do banco de dados não altera e retorna false
	  * se sucesso, altera e retorna true
	  */
	 public static boolean setPass(String usuario,String oldPass, String newPass)
	 {
		 Connection conn = null;
			try
			{  
		          Class.forName("org.postgresql.Driver").newInstance();  
		    }
			catch (Exception e)
			{  
		    }  
			try {
				conn = DriverManager.getConnection("jdbc:postgresql://localhost/mc436","root","root"); 
			} catch (SQLException e) {
				System.err.println("Não foi possível obter conexão com banco!");
				e.printStackTrace();
			}  
				try{
					 Statement st0 = conn.createStatement();
			         ResultSet rs = st0.executeQuery("SELECT * FROM usuario");
			         while (rs.next()) {
			             if(rs.getString("login").equals(usuario) && rs.getString("password").equals(oldPass))
			             {

			    	         PreparedStatement st = conn.prepareStatement("UPDATE usuario SET password='" + newPass +"' WHERE login='"+usuario+"'");
			    	         st.executeUpdate();
			    	         st.close();
			    	         return true;
			             }
			         }
			         st0.close();
				
	         	
			}
			catch(Exception e){
				e.printStackTrace();
			}
			return false;
	}
}
